package com.heima.minio.controller;

import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import io.minio.errors.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

@RestController
@RequestMapping("file")
public class FileController {

    @PostMapping("upload")
    public String upload(MultipartFile file) throws Exception {
        String serverUrl = "http://192.168.85.143:9000";
        // 1. 添加pom依赖
        // 2. 构建minio客户端
        MinioClient client = MinioClient.builder()
                .endpoint(serverUrl) // 指定服务器地址
                .credentials("minio", "minio123")    // 指定用户名和密码
                .build();
        // 3. 调用客户端API上传
        String bucketName = "gz-177";   // 目录名称
        // 假如上传的文件名是  123.jpg,为了避免文件名重复,使用自动生成的uuid+文件后缀  asdfsdfsdfsdfsa.jpg
        // 获取原始文件名
        String originalFilename = file.getOriginalFilename();
        int index = originalFilename.lastIndexOf(".");
        // .jpg
        String suffix = originalFilename.substring(index);
        String objectName = UUID.randomUUID().toString() + suffix;
        PutObjectArgs args = PutObjectArgs.builder()
                .bucket(bucketName)
                .object(objectName)
                .stream(file.getInputStream(), file.getSize(), -1)    // 参数: 文件流  文件大小  分片数量,没有分片为-1
                .contentType(file.getContentType()) // "image/jpeg"
                .build();
        client.putObject(args);
        String url = serverUrl + "/" + bucketName + "/" + objectName;
        return url;
    }
}
